package com.iplatform.iplatformuser.privilege.dao;

import com.iplatform.module.privilege.PriMenuBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>Title: PriMenuMapper</p>
 * <p>Description: </p>
 *
 * @author RayLLi
 * @date 2018年8月27日
 */
@Mapper
public interface PriMenuMapper {
	
	/**
	 * <p>Title: queryMenuName</p>
	 * <p>Description: 联想查询</p>
	 *
	 * @param menuId
	 * @return
	 */
	List<Map<String, String>> queryMenuName();
	
	/**
	 * <p>Title: queryMenu</p>
	 * <p>Description: 查询所有菜单信息 </p>
	 *
	 * @param formMap
	 * @return
	 */
	List<PriMenuBean> queryMenu(Map<String, String> formMap);
	
	/**
	 * <p>Title: queryMenuListByLevel</p>
	 * <p>Description: 查询所有菜单--采用树形结构</p>
	 *
	 * @param formMap
	 * @return
	 */
	List<PriMenuBean> queryMenuListByLevel(Map<String, String> formMap);
	
	/**
	 * 分层查询
	 *
	 * @param formMap
	 * @return
	 */
	List<PriMenuBean> queryTopMenuListByLayer(Map<String, String> formMap);
	
	/**
	 * 由父ID查询子类
	 *
	 * @param formMap
	 * @return
	 */
	List<PriMenuBean> queryMenuListByParentId(Map<String, String> formMap);
	
	/**
	 * <p>Title: insertMenu</p>
	 * <p>Description: 新增菜单</p>
	 *
	 * @param priMenuBean
	 * @return
	 */
	int insertMenu(PriMenuBean priMenuBean);
	
	/**
	 * <p>Title: updateMenu</p>
	 * <p>Description: 修改菜单信息</p>
	 *
	 * @param priMenuBean
	 * @return
	 */
	int updateMenu(PriMenuBean priMenuBean);
	
	/**
	 * <p>Title: deleteMenu</p>
	 * <p>Description: 删除菜单信息</p>
	 *
	 * @param deleteId
	 * @return
	 */
	int deleteMenu(String deleteId);
	
	/**
	 * <p>Title: batchDelete</p>
	 * <p>Description: 批量删除菜单信息</p>
	 *
	 * @param deleteIds
	 */
	void batchDeleteMenu(String[] deleteIds);
	
	/**
	 * 删除子菜单
	 *
	 * @param deleteIds
	 */
	void batchDeleteChildsMenu(String[] deleteIds);
	
	/**
	 * <p>Title: querySelectOptByMenuId</p>
	 * <p>Description: 查询指定菜单的操作列表</p>
	 *
	 * @param menuId
	 * @return
	 */
	List<Map<String, String>> querySelectOptByMenuId(String menuId);
	
	/**
	 * <p>Title: menuSelectedOpt</p>
	 * <p>Description: 菜单新增操作</p>
	 *
	 * @param formMap
	 */
	void insertSelectedOpt(Map<String, String> formMap);
	
	/**
	 * <p>Title: deleteSelectedOpt</p>
	 * <p>Description: 菜单删除已选的操作</p>
	 *
	 * @param menuId
	 */
	void deleteSelectedOpt(String menuId);
	
	/**
	 * <p>Title: getMaxMenuOrder</p>
	 * <p>Description: 获取上级菜单的获取最大menu order值</p>
	 *
	 * @param parentId
	 * @return
	 */
	int getParentMenuMaxOrder(String parentId);
	
	/**
	 * <p>Title: getMenuIdByLink</p>
	 * <p>Description: 通过URL地址来获取对应菜单的ID</p>
	 *
	 * @param menuLink
	 * @return
	 */
	String getMenuIdByLink(String menuLink);
	
	/**
	 * <p>Title: setupOrCancelHomePageByMenuId</p>
	 * <p>Description: 根据菜单ID设置或取消首页设置</p>
	 *
	 * @param menuId
	 */
	@Deprecated
	void setupOrCancelHomePageByMenuId(String menuId);
	
	/**
	 * <p>Title: cancelAllHomePage</p>
	 * <p>Description: 取消掉所有首页设置</p>
	 */
	@Deprecated
	void cancelAllHomePage();
	
	/**
	 * <p>Title: querySelectWithOutRole</p>
	 * <p>Description: 分配账号角色页面---没选择当前角色的列表信息</p>
	 *
	 * @param formMap
	 * @return
	 */
	List<Map<String, String>> listSelectWithOutRole(Map<String, String> formMap);
	
	/**
	 * Title: listSelectWithInRole
	 * Description: 分配账号角色页面---选择了当前角色的列表信息
	 *
	 * @param formMap
	 * @return
	 */
	List<Map<String, String>> listSelectWithInRole(Map<String, String> formMap);
	
	/**
	 * Title: deleteHomeWithMenuId
	 * Description: 根据menuId删除记录
	 *
	 * @param menuId
	 */
	void deleteHomeWithMenuId(String menuId);
	
	/**
	 * Title: deleteHomeWithMenuId
	 * Description: 根据roleId删除记录
	 *
	 * @param roleId
	 */
	void deleteHomeWithRoleId(String roleId);
	
	/**
	 * Title: updateHomeRole
	 * Description: 更新角色首页信息
	 *
	 * @param formMap
	 */
	void updateHomeRole(Map<String, String> formMap);
	
	/**
	 * 查询树状
	 *
	 * @param formMap
	 * @return
	 */
	List<Map<String, String>> listForTree(Map<String, String> formMap);
	
	/**
	 * Title: queryAllFunction
	 * Description: 查寻码表中所有的显示按钮
	 *
	 * @return
	 */
	String[] queryAllFunction();
	
	
	/**
	 * 增加资源和菜单的绑定
	 *
	 * @param formMap
	 */
	void insertResOpt(Map<String, String> formMap);
	
	/**
	 * Title: updateBindFunction
	 * Description: 修改绑定功能
	 *
	 * @param formMap
	 */
	void updateBindFunction(Map<String, String> formMap);
	
	/**
	 * Title: querySelectedByName
	 * Description: 根据名称查询菜单父子节点
	 *
	 * @param formMap
	 * @return
	 */
	List<PriMenuBean> querySelectedByName(Map<String, String> formMap);
	
	/**
	 * Title: updateResOpt
	 * Description: 修改绑定功能
	 *
	 * @param formMap
	 */
	void updateResOpt(Map<String, String> formMap);
	
	/**
	 * Title: deleteResOpt
	 * Description: 删除绑定功能
	 *
	 * @param menuId
	 */
	void deleteResOpt(String menuId);
	
	/**
	 * Title: queryMenuByLink
	 * Description: 根据链接查询菜单
	 */
	List<String> queryMenuByBookId(List<String> bookIds);
	
	List<PriMenuBean> queryChildsMenu(@Param("parentId") String parentId);
	
	/**
	 * 菜单的模糊查询
	 *
	 * @return
	 */
	List<PriMenuBean> fuzzyQueryMenu(Map<String, String> formMap);
	
	/**
	 * 修改菜单状态
	 *
	 * @param status
	 * @param menuId
	 */
	void updateStatus(@Param("status") String status, @Param("menuId") String menuId);
	
	/**
	 * 根据菜单id查出子菜单id
	 *
	 * @param menuId
	 * @return
	 */
	List<String> queryChildMenuId(String menuId);
	
	/**
	 * 删除时查询子菜单数量
	 *
	 * @param menuId
	 * @return
	 */
	int queryChildMenuNum(String menuId);
	
	/**
	 * 逻辑删除菜单
	 *
	 * @param menuId
	 */
	void delMenu(String menuId);
	
	/**
	 * 获取前菜单下大于等于输入排序号的菜单id
	 *
	 * @param menuOrd
	 * @return
	 */
	List<String> findByMenuOrd(@Param("menuOrd") Integer menuOrd, @Param("parentId") String parentId,@Param("menuId") String menuId);
	
	/**
	 * 获取当前菜单下所有排序号
	 *
	 * @return
	 */
	List<Integer> findMenuOrd(@Param("parentId") String parentId, @Param("menuId") String menuId);
	
	/**
	 * 批量更新排序码(+1)
	 *
	 * @param menuIds
	 */
	void menuOrdAddOne(@Param("menuIds") List<String> menuIds);
	
	
	PriMenuBean  findMenuIdBySysDataCodeType(String typeCode);
	
	
	int deleteMenuWithResourceMenuId(String resourceMenuId);

	/**
	 * 通过菜单id查找父id
	 * @param menuId
	 * @return
	 */
	String findParentId(@Param("menuId") String menuId);

	/**
	 * 查询绑定的子菜单数量
	 * @param parentId
	 * @param roleId
	 * @return
	 */
	int findSonMenuNum(@Param("parentId") String parentId, @Param("roleId") String roleId);

	Integer queryMaxOrd(String parent_id);
}
